// 简单的 markdown 渲染实现

class MarkdownService {
  /**
   * 将markdown文本转换为HTML
   * @param {string} markdown - markdown文本
   * @returns {string} HTML字符串
   */
  static render(markdown) {
    if (!markdown || typeof markdown !== 'string') {
      console.warn('MarkdownService.render: 输入不是字符串', markdown)
      return ''
    }

    try {
      let html = markdown
        // 处理代码块
        .replace(/```([\s\S]*?)```/g, '<pre class="markdown-code-block"><code>$1</code></pre>')
        // 处理标题
        .replace(/^### (.*$)/gim, '<h3 class="markdown-heading markdown-h3">$1</h3>')
        .replace(/^## (.*$)/gim, '<h2 class="markdown-heading markdown-h2">$1</h2>')
        .replace(/^# (.*$)/gim, '<h1 class="markdown-heading markdown-h1">$1</h1>')
        // 处理粗体和斜体
        .replace(/\*\*(.*?)\*\*/g, '<strong class="markdown-strong">$1</strong>')
        .replace(/\*(.*?)\*/g, '<em class="markdown-em">$1</em>')
        // 处理行内代码
        .replace(/`(.*?)`/g, '<code class="markdown-inline-code">$1</code>')
        // 处理链接
        .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" target="_blank" rel="noopener noreferrer" class="markdown-link">$1</a>')
        // 处理删除线
        .replace(/~~(.*?)~~/g, '<del class="markdown-del">$1</del>')
        // 处理引用
        .replace(/^> (.*$)/gim, '<blockquote class="markdown-blockquote">$1</blockquote>')
        // 处理水平线
        .replace(/^---$/gim, '<hr class="markdown-hr">')
        // 处理无序列表
        .replace(/^\* (.*$)/gim, '<li class="markdown-list-item">$1</li>')
        .replace(/^- (.*$)/gim, '<li class="markdown-list-item">$1</li>')
        .replace(/^\+ (.*$)/gim, '<li class="markdown-list-item">$1</li>')
        // 处理有序列表
        .replace(/^\d+\. (.*$)/gim, '<li class="markdown-list-item">$1</li>')
        // 包装列表项
        .replace(/(<li class="markdown-list-item">.*<\/li>)/s, '<ul class="markdown-unordered-list">$1</ul>')
        // 处理段落
        .replace(/\n\n/g, '</p><p class="markdown-paragraph">')
        // 处理换行
        .replace(/\n/g, '<br>')
      
      // 添加段落标签
      if (html && !html.startsWith('<')) {
        html = '<p class="markdown-paragraph">' + html + '</p>'
      }
      
      return html
    } catch (error) {
      console.error('Markdown渲染失败:', error, '输入内容:', markdown)
      // 如果渲染失败，返回简单的HTML转义版本
      return markdown
        .replace(/&/g, '&amp;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;')
        .replace(/\n/g, '<br>')
    }
  }

  /**
   * 检查文本是否包含markdown语法
   * @param {string} text - 要检查的文本
   * @returns {boolean} 是否包含markdown语法
   */
  static hasMarkdown(text) {
    if (!text || typeof text !== 'string') {
      return false
    }

    // 检查常见的markdown语法
    const markdownPatterns = [
      /#{1,6}\s+/, // 标题
      /\*\*.*?\*\*/, // 粗体
      /\*.*?\*/, // 斜体
      /`.*?`/, // 行内代码
      /```[\s\S]*?```/, // 代码块
      /^\s*[-*+]\s+/m, // 无序列表
      /^\s*\d+\.\s+/m, // 有序列表
      /\[.*?\]\(.*?\)/, // 链接
      /!\[.*?\]\(.*?\)/, // 图片
      /^\s*>/m, // 引用
      /^\s*\|.*\|/m, // 表格
      /^---+$/m, // 水平线
      /~~.*?~~/, // 删除线
    ]

    return markdownPatterns.some(pattern => pattern.test(text))
  }

  /**
   * 获取markdown文本的纯文本版本（去除markdown语法）
   * @param {string} markdown - markdown文本
   * @returns {string} 纯文本
   */
  static getPlainText(markdown) {
    if (!markdown || typeof markdown !== 'string') {
      return ''
    }

    return markdown
      // 移除代码块
      .replace(/```[\s\S]*?```/g, '')
      // 移除行内代码
      .replace(/`[^`]*`/g, '')
      // 移除链接，保留文本
      .replace(/\[([^\]]*)\]\([^)]*\)/g, '$1')
      // 移除图片
      .replace(/!\[([^\]]*)\]\([^)]*\)/g, '$1')
      // 移除粗体和斜体标记
      .replace(/\*\*([^*]*)\*\*/g, '$1')
      .replace(/\*([^*]*)\*/g, '$1')
      // 移除删除线
      .replace(/~~([^~]*)~~/g, '$1')
      // 移除标题标记
      .replace(/^#{1,6}\s+/gm, '')
      // 移除列表标记
      .replace(/^\s*[-*+]\s+/gm, '')
      .replace(/^\s*\d+\.\s+/gm, '')
      // 移除引用标记
      .replace(/^\s*>\s*/gm, '')
      // 移除水平线
      .replace(/^---+$/gm, '')
      // 清理多余的空行
      .replace(/\n\s*\n\s*\n/g, '\n\n')
      .trim()
  }
}

export default MarkdownService
